﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using l1cs.server.model.Instance;
using l1cs.server.serverpackets;

namespace l1cs.server.clientpackets
{
    public class C_DeleteInventoryItem : ClientBasePacket
    {
        private static Logger _log = Logger.getLogger( typeof( C_DeleteInventoryItem ).FullName );
        private const String _C_DELETE_INVENTORY_ITEM
                = "[C] C_DeleteInventoryItem";

        public C_DeleteInventoryItem( byte[] decrypt, ClientThread client )
            : base( decrypt )
        {
            int itemObjectId = readD();
            L1PcInstance pc = client.getActiveChar();
            L1ItemInstance item = pc.getInventory().getItem( itemObjectId );

            // 削除しようとしたアイテムがサーバー上に無い場合
            if ( item == null )
            {
                return;
            }

            if ( item.getItem().isCantDelete() )
            {
                // \f1削除できないアイテムや装備しているアイテムは捨てられません。
                pc.sendPackets( new S_ServerMessage( 125 ) );
                return;
            }

            //Object[] petlist = pc.getPetList().values().toArray();
            foreach ( Object petObject in pc.getPetList().Values )
            {
                if ( petObject is L1PetInstance )
                {
                    L1PetInstance pet = (L1PetInstance)petObject;
                    if ( item.getId() == pet.getItemObjId() )
                    {
                        // \f1%0は捨てたりまたは他人に讓ることができません。
                        pc.sendPackets( new S_ServerMessage( 210, item.getItem()
                                .getName() ) );
                        return;
                    }
                }
            }

            if ( item.isEquipped() )
            {
                // \f1削除できないアイテムや装備しているアイテムは捨てられません。
                pc.sendPackets( new S_ServerMessage( 125 ) );
                return;
            }
            if ( item.getBless() >= 128 )
            { // 封印された装備
                // \f1%0は捨てたりまたは他人に讓ることができません。
                pc.sendPackets( new S_ServerMessage( 210, item.getItem().getName() ) );
                return;
            }

            pc.getInventory().removeItem( item, item.getCount() );
            pc.turnOnOffLight();
        }

        override
        public String getType()
        {
            return _C_DELETE_INVENTORY_ITEM;
        }
    }
}